from abc import ABC, abstractproperty, abstractmethod
from typing import Tuple
from ..entity import Log

class TimeLogger(ABC):
    @abstractmethod
    def get_log(self) -> Log:
        raise NotImplementedError()

    @abstractmethod
    def save_current_capture(self) -> str:
        raise NotImplementedError()


class Notifier(ABC):
    @abstractmethod
    def notify_by_toast(self, msg: str, title: str, duration_second: int) -> None:
        raise NotImplementedError()

    @abstractmethod
    def notify_by_window(self, msg: str, title: str, duration_second: int) -> None:
        raise NotImplementedError()


class OS(ABC):
    @property
    @abstractmethod
    def notifier(self) -> Notifier:
        raise NotImplementedError()

    @property
    @abstractmethod
    def time_logger(self) -> TimeLogger:
        raise NotImplementedError()
